﻿using System;
using System.Collections.Generic;

namespace Commons.Extension
{
    /// <summary>
    /// Utilitários para números inteiros (Int32)
    /// </summary>
    public static class IntegerExtension
    {
        /// <summary>
        /// Converte um número inteiro para um array de Enums
        /// </summary>
        /// <typeparam name="T">Tipo do Enum</typeparam>
        /// <param name="aBitwise">Número em bitwise</param>
        /// <returns>Array de Enums do tipo <typeparamref name="T"/></returns>
        /// <seealso cref="EnumExtension.ToBitwise{T}"/>
        public static T[] ToEnum<T>( this int aBitwise )
        {
            List<T> lReturn = new List<T>();

            foreach ( T lTextStyle in Enum.GetValues( typeof( T ) ) )
            {
                int lIntEnum = Convert.ToInt32( lTextStyle );

                if ( ( aBitwise & lIntEnum ) == lIntEnum )
                {
                    lReturn.Add( lTextStyle );
                }
            }

            return lReturn.ToArray();
        }
    }
}